From 818ff653a7afa51e11631e4ed373f70fd45e3a21 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Wed, 19 Apr 2017 13:25:44 +0200 Subject: [PATCH] x86emul: always fill x86_insn_modrm()'s outputs The function is rather unlikely to be called for insns which don't have ModRM bytes, and hence addressing Coverity's recurring complaint of callers potentially consuming uninitialized data when they know that certain opcodes have ModRM bytes can be suppressed this way without unduly adding overhead to fast paths. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Release-acked-by: Julien Grall --- xen/arch/x86/x86_emulate/x86_emulate.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 6f1076148e..c822221d8a 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -8017,8 +8017,14 @@ x86_insn_modrm(const struct x86_emulate_state *state, { check_state(state); - if ( state->modrm_mod > 3 ) + if ( unlikely(state->modrm_mod > 3) ) + { + if ( rm ) + *rm = ~0U; + if ( reg ) + *reg = ~0U; return -EINVAL; + } if ( rm ) *rm = state->modrm_rm; -- 2.30.2